﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Colonisator.Classes
{
    /// <summary>
    /// Fournit les éléments de messages d'erreur
    /// Le gestionnaire n'est intéressant que pour une série de messages imbriqués (contrôles à la suite)
    /// </summary>
    public class GestionnaireMessages
    {
        private List<string> _ListeMessages { get; set; }

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        public GestionnaireMessages()
        {
            _ListeMessages = new List<string>();
        }

        /// <summary>
        /// Ajoute la chaîne à la liste de messages
        /// </summary>
        /// <param name="unMessage"></param>
        public void AjouterMessage(string unMessage)
        {
            _ListeMessages.Add(unMessage);
        }

        /// <summary>
        /// Donne le nombre de messages actuellement stockés
        /// </summary>
        /// <returns></returns>
        public Int32 Count()
        {
            return _ListeMessages.Count();
        }

        /// <summary>
        /// Retourne la liste des messages avec retour chariot, prêt à afficher.
        /// </summary>
        /// <returns></returns>
        public string FormaterListeMessages(Int32 uneCriticite)
        {
            string corpsmessage = string.Empty;
            string entetemessage = string.Empty;

            foreach (string msg in _ListeMessages)
            {
                corpsmessage += msg + Constantes.RETOUR_CHARIOT;
            }

            switch (uneCriticite)
            {
                case Constantes.NIVEAU_CRITICITE_INFORMATION:
                {
                    entetemessage = "Information : " + Constantes.RETOUR_CHARIOT;
                    break;
                }

                case Constantes.NIVEAU_CRITICITE_AVERTISSEMENT:
                {
                    entetemessage = "Avertissement : " + Constantes.RETOUR_CHARIOT;
                    break;
                }

                case Constantes.NIVEAU_CRITICITE_ERREUR:
                {
                    entetemessage = "Une ou plusieurs erreurs ont été détectées : " + Constantes.RETOUR_CHARIOT;
                    break;
                }

            }

            return entetemessage + Constantes.RETOUR_CHARIOT + corpsmessage;
        }

        /// <summary>
        /// Vidage de la liste de messages en cours
        /// </summary>
        public void ViderListeMessages()
        {
            _ListeMessages.Clear();
        }
    }
}
